package com.xunk.equipment.service.mandun.vo;

import com.xunk.equipment.service.mandun.constant.MandunConstant;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.ToString;

import java.math.BigDecimal;

/**
 * @ProjectName: xunk
 * @Package: com.xunk.equipment.service.ruying.mandun.vo
 * @ClassName: MandunRealTimeStatus
 * @Author: luanzhiwei
 * @Description: 曼顿设备实时状态实体类
 * @Date: 2021/3/28 18:15
 * @Version: 1.0
 */
@NoArgsConstructor
@Data
@ToString
@EqualsAndHashCode
public class MandunRealTimeStatus {
    /**
     * 设备id，该字段推送时有值
     */
    private String mac;
    /**
     * 线路地址
     */
    private String addr;
    /**
     * 线路名称，推送时该值为空
     */
    private String title;
    /**
     * 线路有效性(和通信模块的连通性):true有效;false无效
     */
    private boolean validity;
    /**
     * 线路开关状态:true开;fase关
     */
    private boolean oc;
    /**
     * 线路开关状态变更时间
     */
    private String ocTime;
    /**
     * 远程控制合闸分闸true允许;false不允许一般开关被手动分闸后，此值为false
     */
    private boolean enableNetCtrl;
    /**
     * 更新时间
     */
    private String updateTime;
    /**
     * 设备通信模块是否在线（ture：在线，false：不在线）
     */
    private boolean online;
    /**
     * 线路当前电量（又称为刻度电量）
     */
    private String power;
    /**
     * 过功门限值
     */
    private String mxgg;
    /**
     * 过流门限值
     */
    private String mxgl;
    /**
     * 类型：220单相;380三相
     */
    private String lineType;
    /**
     * 告警状态，0或128表示告警取消;非0表示存在告警
     */
    private String alarm;
    /**
     * 线路规格
     */
    private String specification;
    /**
     * -1为进线直连，非-1表示电量目标节点号(接入的汇电线路)
     */
    private String gatherAddr;
    /**
     * 控制标记(true/false)
     * 说明：设备只转存该标记，具体逻辑由客户端UI实现
     */
    private boolean control;
    /**
     * 显示标记(true/false)
     * 注意：设备只转存该标记，具体逻辑由客户端UI实现
     */
    private boolean visibility;
    /**
     * 总线标记(1:总线/0:非总线)
     */
    private String mainLine;

    //=================================
    /**
     * 单相电情况-漏电流(单位：mA)
     */
    private String aLd;
    /**
     * 单相电情况-电流(单位：A)
     * 三相电情况-A相电流(单位：A)
     */
    private String aA;
    /**
     * 单相电情况-温度(单位：℃)
     * 三相电情况-A相温度(单位：℃)
     */
    private String aT;
    /**
     * 单相电情况-电压(单位：V)
     * 三相电情况-A相电压(单位：V)
     */
    private String aV;
    /**
     * 单相电情况-功率(单位：W)
     * 三相电情况-A相功率(单位：W)
     */
    private String aW;
    /**
     * 单相电情况-功率因数
     * 三相电情况-A 相功率因数
     */
    private String aPF;
    /**
     * 三相电情况-漏电流(单位：mA)
     */
    private String gLd;
    /**
     * 三相电情况-平均电流(单位：A)
     */
    private String gA;
    /**
     * 三相电情况-壳温度(单位：℃)
     */
    private String gT;
    /**
     * 三相电情况-平均电压(单位：V)
     */
    private String gV;
    /**
     * 三相电情况-功率和值(单位：W)
     */
    private String gW;
    /**
     * 三相电情况-合相功率因数
     */
    private String gPF;
    /**
     * 三相电情况-B相电流(单位：A)
     */
    private String bA;
    /**
     * 三相电情况-B相温度(单位：℃)
     */
    private String bT;
    /**
     * 三相电情况-B相电压(单位：V)
     */
    private String bV;
    /**
     * 三相电情况-B相功率(单位：W)
     */
    private String bW;
    /**
     * 三相电情况-B 相功率因数
     */
    private String bPF;
    /**
     * 三相电情况-C相电流(单位：A)
     */
    private String cA;
    /**
     * 三相电情况-C相温度(单位：℃)
     */
    private String cT;
    /**
     * 三相电情况-C相电压(单位：V)
     */
    private String cV;
    /**
     * 三相电情况-C相功率(单位：W)
     */
    private String cW;
    /**
     * 三相电情况-C 相功率因数
     */
    private String cPF;
    /**
     * 三相电情况-零线电流(单位：A)
     */
    private String nA;
    /**
     * 三相电情况-零线温度(单位：℃)
     */
    private String nT;


    /**
     * 当前瞬时功率
     *
     * @return
     */
    public BigDecimal currentPower() {
        if (lineType.equals("220")) {
            return new BigDecimal(getAW());
        }
        if (lineType.equals("380")) {
            return new BigDecimal(getGW());
        }
        return new BigDecimal(MandunConstant.ZERO);
    }

    /**
     * 是否在线
     *
     * @return
     */
    public boolean ifOnline() {
        return isOnline() && isValidity();
    }
}
